package uabc.arduino.componentes;

import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
import javax.swing.border.BevelBorder;
import javax.swing.JLabel;
import java.awt.Font;
import java.util.ArrayList;

import javax.swing.ButtonGroup;
import javax.swing.JTextField;
import javax.swing.JRadioButton;
import javax.swing.SwingConstants;
import javax.swing.JList;

import javax.swing.JScrollPane;

import uabc.arduino.elementos.SerieConfiguration;
import uabc.arduino.enums.TipoGrafica;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JComboBox;
import javax.swing.DefaultComboBoxModel;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import java.io.File;

public class AddChartPanel extends JPanel {
	private JTextField txtTitulo;
	private JTextField txtUnidades;
	private JRadioButton rdbtnSecuencial;
	private JRadioButton rdbtnOsiloscopio;
	private JList lstConfiguraciones;
	private ButtonGroup grupo;
	private JTextField txtfMS;
	private JLabel lblMs;
	private JTextField txtfArchivo;
	private JComboBox cmbxAbrirEn;
	private JComboBox<String> cmbxImagenes;
	private JLabel lblUnidades;
	private JLabel lblTipo;
	private JComboBox<String> cmbxConfiguracion;
	private JLabel lblConfiguracin;
	private JLabel lblImagen;

	public AddChartPanel(ArrayList<SerieConfiguration> configuraciones) {
		setLayout(null);

		JPanel pnlPropiedades = new JPanel();
		pnlPropiedades.setLayout(null);
		pnlPropiedades.setBorder(new TitledBorder(new BevelBorder(
				BevelBorder.LOWERED, null, null, null, null), "Propiedades",
				TitledBorder.LEADING, TitledBorder.TOP, null, null));
		pnlPropiedades.setBounds(203, 10, 302, 234);
		add(pnlPropiedades);

		JLabel label = new JLabel("Titulo: ");
		label.setFont(new Font("Tahoma", Font.PLAIN, 13));
		label.setBounds(10, 48, 70, 20);
		pnlPropiedades.add(label);

		lblUnidades = new JLabel("Unidades:");
		lblUnidades.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblUnidades.setBounds(10, 107, 70, 20);
		pnlPropiedades.add(lblUnidades);

		txtTitulo = new JTextField();
		txtTitulo.setColumns(10);
		txtTitulo.setBounds(100, 49, 176, 20);
		pnlPropiedades.add(txtTitulo);

		txtUnidades = new JTextField();
		txtUnidades.setColumns(10);
		txtUnidades.setBounds(100, 108, 176, 20);
		pnlPropiedades.add(txtUnidades);

		lblTipo = new JLabel("Tipo:");
		lblTipo.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblTipo.setBounds(10, 148, 47, 14);
		pnlPropiedades.add(lblTipo);

		rdbtnOsiloscopio = new JRadioButton("Osciloscopio");
		rdbtnOsiloscopio.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				txtfMS.setVisible(true);
				lblMs.setVisible(true);
			}
		});
		rdbtnOsiloscopio.setBounds(80, 171, 110, 23);
		pnlPropiedades.add(rdbtnOsiloscopio);

		rdbtnSecuencial = new JRadioButton("Secuencial");
		rdbtnSecuencial.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				txtfMS.setVisible(false);
				lblMs.setVisible(false);
			}
		});
		rdbtnSecuencial.setBounds(80, 145, 99, 23);
		pnlPropiedades.add(rdbtnSecuencial);
		grupo = new ButtonGroup();

		grupo.add(rdbtnOsiloscopio);
		grupo.add(rdbtnSecuencial);

		txtfMS = new JTextField();
		txtfMS.setVisible(false);
		txtfMS.setText("5000");
		txtfMS.setBounds(82, 201, 70, 20);
		pnlPropiedades.add(txtfMS);
		txtfMS.setColumns(10);

		lblMs = new JLabel("ms");
		lblMs.setVisible(false);
		lblMs.setBounds(156, 204, 23, 14);
		pnlPropiedades.add(lblMs);

		JLabel lblArchivo = new JLabel("Archivo:");
		lblArchivo.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblArchivo.setBounds(10, 76, 70, 20);
		pnlPropiedades.add(lblArchivo);

		txtfArchivo = new JTextField();
		txtfArchivo.setColumns(10);
		txtfArchivo.setBounds(100, 77, 176, 20);
		pnlPropiedades.add(txtfArchivo);

		JLabel lblAbrirEn = new JLabel("Abrir en:");
		lblAbrirEn.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblAbrirEn.setBounds(10, 23, 70, 14);
		pnlPropiedades.add(lblAbrirEn);

		cmbxAbrirEn = new JComboBox();
		cmbxAbrirEn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (cmbxAbrirEn.getSelectedItem().toString().equals("Imagen")) {
					cmbxImagenes.setVisible(true);
					cmbxConfiguracion.setVisible(true);
					lblImagen.setVisible(true);
					lblConfiguracin.setVisible(true);
					lblUnidades.setVisible(false);
					txtUnidades.setVisible(false);
					lblTipo.setVisible(false);
					rdbtnOsiloscopio.setVisible(false);
					rdbtnSecuencial.setVisible(false);
					txtfMS.setVisible(false);
					lblMs.setVisible(false);
				} else {
					cmbxImagenes.setVisible(false);
					cmbxConfiguracion.setVisible(false);
					lblImagen.setVisible(false);
					lblConfiguracin.setVisible(false);
					lblUnidades.setVisible(true);
					txtUnidades.setVisible(true);
					lblTipo.setVisible(true);
					rdbtnOsiloscopio.setVisible(true);
					rdbtnSecuencial.setVisible(true);
					if (rdbtnOsiloscopio.isSelected()) {
						txtfMS.setVisible(true);
						lblMs.setVisible(true);
					}
				}
			}
		});
		cmbxAbrirEn.setModel(new DefaultComboBoxModel(new String[] {
				"Ventana Nueva", "Pesta\u00F1a", "Imagen" }));
		cmbxAbrirEn.setBounds(101, 21, 175, 20);
		pnlPropiedades.add(cmbxAbrirEn);

		File folder = new File("imagenes");
		File[] listOfFiles = folder.listFiles();
		String[] nombreImagenes = new String[listOfFiles.length];
		for (int i = 0; i < listOfFiles.length; i++) {
			if (listOfFiles[i].isFile()) {
				System.out.println("File " + listOfFiles[i].getName());
				nombreImagenes[i] = new String(listOfFiles[i].getName());
			}
		}

		cmbxImagenes = new JComboBox<String>();
		cmbxImagenes.setVisible(false);
		cmbxImagenes.setBounds(100, 108, 176, 20);
		cmbxImagenes.setModel(new DefaultComboBoxModel<String>(nombreImagenes));
		pnlPropiedades.add(cmbxImagenes);

		lblImagen = new JLabel("Imagen:");
		lblImagen.setVisible(false);
		lblImagen.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblImagen.setBounds(10, 107, 70, 20);
		pnlPropiedades.add(lblImagen);

		lblConfiguracin = new JLabel("Configuraci\u00F3n:");
		lblConfiguracin.setVisible(false);
		lblConfiguracin.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblConfiguracin.setBounds(10, 138, 83, 20);
		pnlPropiedades.add(lblConfiguracin);

		File fconf = new File("conf-img");
		File[] lFiles = fconf.listFiles();
		String[] nombreArchivos = new String[lFiles.length];
		for (int i = 0; i < lFiles.length; i++) {
			if (lFiles[i].isFile()) {
				System.out.println("File " + lFiles[i].getName());
				nombreArchivos[i] = new String(lFiles[i].getName());
			}
		}

		cmbxConfiguracion = new JComboBox<String>();
		cmbxConfiguracion.setVisible(false);
		cmbxConfiguracion.setBounds(100, 141, 176, 20);
		cmbxConfiguracion.setModel(new DefaultComboBoxModel<String>(
				nombreArchivos));
		pnlPropiedades.add(cmbxConfiguracion);

		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(10, 31, 183, 213);
		add(scrollPane);

		lstConfiguraciones = new JList(configuraciones.toArray());
		scrollPane.setViewportView(lstConfiguraciones);

		JLabel lblSeleccione = new JLabel("Seleccione:");
		lblSeleccione.setBounds(10, 10, 158, 16);
		add(lblSeleccione);
		lblSeleccione.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblSeleccione.setHorizontalAlignment(SwingConstants.CENTER);

	}

	public boolean isConfiguracionSelected() {
		return !lstConfiguraciones.isSelectionEmpty();
	}

	public boolean isTipoSelected() {
		if (grupo.getSelection() == null)
			return false;
		else
			return true;
	}

	public boolean isImagen() {
		if (cmbxAbrirEn.getSelectedItem().toString().equals("Imagen")) {
			return true;
		} else
			return false;
	}

	public boolean isTipoOsciloscopio() {
		if (rdbtnOsiloscopio.isSelected())
			return true;
		return false;
	}

	public boolean isPeriodoCorrecto() {
		if (txtfMS.getText().trim().equals(""))
			return false;
		try {
			Integer.parseInt(txtfMS.getText());
			return true;
		} catch (NumberFormatException e) {
			return false;
		}
	}

	public ChartConfiguration getChartConfiguration() {
		ChartConfiguration configuracion = new ChartConfiguration();
		Object[] selectedConfiguraciones = lstConfiguraciones
				.getSelectedValues();
		ArrayList<SerieConfiguration> arrayConf = new ArrayList<SerieConfiguration>();
		for (int i = 0; i < selectedConfiguraciones.length; i++)
			arrayConf.add((SerieConfiguration) selectedConfiguraciones[i]);
		configuracion.setConfiguraciones(arrayConf);
		configuracion.setTitulo(txtTitulo.getText());
		configuracion.setUnidades(txtUnidades.getText());
		if (rdbtnSecuencial.isSelected())
			configuracion.setTipo(TipoGrafica.SECUENCIAL);
		else {
			configuracion.setTipo(TipoGrafica.OSCILOSCOPIO);
			configuracion.setPeriodo(Integer.parseInt(txtfMS.getText()));
		}
		configuracion.setNombreArchivo(txtfArchivo.getText().trim());
		configuracion.setModoApertura(cmbxAbrirEn.getSelectedItem().toString());
		configuracion.setImagen(cmbxImagenes.getSelectedItem().toString());
		configuracion.setArchivoConfiguracion(cmbxConfiguracion
				.getSelectedItem().toString());
		return configuracion;
	}
}
